package a11_MoneyChange;

/**
 * @Author quan
 * @Description 金额转换——————>跟a09练习的罗马数字有异曲同工之妙
 * 2135——>零佰零拾零万贰仟壹佰伍拾叁元
 * 思路：零佰零拾零万贰仟壹佰伍拾叁元——>零零零贰壹伍叁——>贰壹伍叁——>2153
 * @Date 2023/1/31 9:57
 */
//参考luoma数字例子自己写的，功能基本可以实现。
public class OursTestDemo {
    public static void main(String[] args) {
        //1、数字转为汉字
        String moneyStr = "2135";
        //2、处理后的7位加0数字
        String newmoneyStr = addzero(moneyStr);
        String res1 = fornum1(newmoneyStr);
        System.out.println(res1);
        //3、给转好的汉字每位后加单位
    }


    //第二步：返回的汉字少于7位的数字前面补0
    public static String addzero(String moneyStr){
        StringBuilder sb = new StringBuilder();
        if(moneyStr.length()<=7){
            //补0个数的计算
            for (int i = 7; i > moneyStr.length(); i--) {
                sb.append(0);
            }
            sb.append(moneyStr);
        }
        return sb.toString();
    }

    //第一步：转为汉字（用到了两个函数，进行嵌套调用）
    //作用：取出num中的每一个字符，作为参数传入changenum函数中
    //返回值：每一个数字
    public static String fornum1(String moneyStr) {
        //定义一个存储单位的字符数组
        String [] arr = {"佰","拾","万","仟","佰","拾","元"};
        int index = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            //取出每一个字符后，将字符转换为数字
            index = c - '0';
            //调用转为汉字的函数
            String str = changeNum2(index);
            //定义一个容器将转换后的汉字存储起来
            sb.append(str);
            //第三步：每转换一个汉字后，在它后面 从字符数组中取出一个单位加在后面，取的索引号从0开始，刚好是for循环的i索引值
            sb.append(arr[i]);
        }
        return sb.toString();
    }

    //形参：要改变的数字
    //返回值：从数组中转换出来的汉字
    public static String changeNum2(int index) {
        //定义一个字符数组，将汉字存储起来
        String [] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        String str = arr[index];
        return str;
    }
}
